package org.example.functionInterface;

/**
 * 如果接口里只有一个抽象方法，那么就是函数式接口，
 * 可以使用注解(@FunctionalInterface)检测该接口是否是函数式接口，
 * 即只能有一个抽象方法
 */
@FunctionalInterface
public interface MyFunctionalInterface {
    /**
     * 函数式接口里可以定义默认方法：默认方法有方法体,不是抽象方法,符合函数式接口的定义要求。函数式接口里可以定义静态方法：
     * 静态方法也不是抽象方法,是一个有具体方法实现的方法,同样也符合函数式接口的定义的。
     * 函数式接口里可以定义Object里的public方法(改成抽象方法)：虽然它们是抽象方法,却不需要覆盖重写,
     * 因为所有接口的实现类都是Object类的子类,而在Object类中有这些方法的具体的实现。
     */
    //抽象方法
    public abstract void method();

    //Object类的public方法变成抽象方法
    public abstract boolean equals(Object obj);

    public abstract String toString();

    //默认方法
    public default void show(String s) {
        //打印小写
        System.out.println(s.toLowerCase());

    }
    //静态方法

    public static void print(String s) {
        //打印大写
        System.out.println(s.toUpperCase());
    }
}
